#include "drv_nixie_tube.h"
#include "drv_systick.h"
#include "drv_spi.h"
#include "drv_sht20.h"
#include "stdio.h"

uint8_t digits[4]={0};
uint8_t seg_code[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
0xbf, // 显示 0.
0x86, // 显示 1.
0xdb, // 显示 2.
0xcf, // 显示 3.
0xe6, // 显示 4.
0xed, // 显示 5.
0xfd, // 显示 6.
0x87, // 显示 7.
0xff, // 显示 8.
0xef}; // 显示 9.
static uint8_t seg_wei[]={0x01,0x02,0x04,0x08};
uint8_t current_mode = 0;//0 显示0 1 显示温度  2 显示温度
float currentValue =0.0f;             // 当前显示的值

void timer7_init(void) {
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    // 使能定时器7时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);

    // 定时器基础配置
    TIM_TimeBaseStructure.TIM_Prescaler = 83;        // 预分频：84MHz/84=1MHz
    TIM_TimeBaseStructure.TIM_Period = 999;          // 周期：1MHz/1000=1kHz(1ms)
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInit(TIM7, &TIM_TimeBaseStructure);

    // 使能更新中断
    TIM_ITConfig(TIM7, TIM_IT_Update, ENABLE);

    // 配置NVIC
    NVIC_InitStructure.NVIC_IRQChannel = TIM7_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  // 优先级低于按键
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    // 启动定时器
    TIM_Cmd(TIM7, ENABLE);
}
uint8_t seg_display_flg=0;
void TIM7_IRQHandler(void)
{

	 if (TIM_GetITStatus(TIM7, TIM_IT_Update) != RESET) {
		 seg_display_flg=1;

	//清除中断标志
        TIM_ClearITPendingBit(TIM7, TIM_IT_Update);
    }
	 
}

void drv_74hc595_init(void)
{
	drv_spi2_init();
	timer7_init();
	displayNumber(0);   // 初始显示0
}

void drv_74hc595_display(uint8_t wei,uint8_t duan)
{	// 拉低NSS，开始传输
	GPIO_ResetBits(GPIOB, GPIO_Pin_12);//拉低NSS
	
	drv_spi2_senddata(seg_wei[wei]);//决定亮哪个
	drv_spi2_senddata(seg_code[duan]);
	
	delay_ms(1);
	GPIO_SetBits(GPIOB, GPIO_Pin_12);//拉高NSS，锁存数据
	
}

// 更新显示值（读取传感器数据）
float updateDisplayValue(uint8_t current_mode) {
	if (current_mode == 0) {
        currentValue=0.0f;          // 显示0
    }
    else if (current_mode == 1) {
        currentValue=drv_sht20_getdata();          // 读取温度数据
    }
    else if (current_mode == 2) {
        currentValue=drv_sht20_gethumdata();       // 读取湿度数据

    }
	printf("currentValue=%.2f\r\n",currentValue);
	return currentValue;
}

// 在数码管上显示带两位小数的数字
void displayNumber(float num) {
	
    int data=(int)(num*100);
	
    // 分离各位数字
    digits[3] = data % 10;    // 个位
    digits[2] = (data/10) % 10;           // 十位
    digits[1] = (data / 100) % 10;    // 百位
    digits[0] = (data / 1000) % 10;           // 千位
	
	//printf("digits[0]=%d,digits[1]=%d,digits[2]=%d,digits[3]=%d\r\n",digits[0],digits[1],digits[2],digits[3]);
    
    
}
